package com.zyf.swordRefersOffer;

import java.util.Scanner;

public class _09_ {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();
		int n = sc.nextInt();
		System.out.println(isPalindromeAndPrime(m, n));
	}

	/**
	 * 判断是否是回文素数
	 * 
	 * @param num
	 * @return
	 */
	public static int isPalindromeAndPrime(int n, int m) {
		int count = 0;
		if (n < 10) {
			for (int i = n; i <= 9; i++) {
				if (isPrime(i)) {
					count++;
				}
			}
			n = 10;
		}
		for (int i = n; i <= m; i++) {
			String string = i + "";
			for (int j = 0; j < string.length(); j++) {
				String s1 = string.substring(0, j);
				String s2 = string.substring(j + 1);
				int num = Integer.parseInt(s1 + s2);
				if (isPalindrome(num) && isPrime(num)) {
					count++;
					break;
				}
			}

		}
		return count;
	}

	/**
	 * 判断是否为素数/质数的最有效方法 1.小于5的2和3 2.大于等于5的素数一定和6的倍数相邻，例如5和7，11和13,17和19等等。
	 * 
	 * @param num
	 * @return
	 */
	public static boolean isPrime(int num) {
		// 两个较小数另外处理
		if (num == 2 || num == 3) {
			return true;
		}

		// 不在6的倍数两侧的一定不是素数
		if (num % 6 != 1 && num % 6 != 5) {
			return false;
		}

		int tmp = (int) Math.sqrt(num);// 获取平方根
		// 在6的倍数两侧的也可能不是素数
		for (int i = 5; i <= tmp; i += 6) {
			if (num % i == 0 || num % (i + 2) == 0) {
				return false;
			}
		}
		return true;
	}

	static int reversal(int num) { // 反转原数
		int result = 0;
		while (num != 0) {
			int lastDigit = num % 10;
			result = result * 10 + lastDigit;
			num = num / 10;
		}
		return result;
	}

	/**
	 * 判断是否为回文数
	 * 
	 * @param num
	 * @return
	 */
	static boolean isPalindrome(int num) {
		return num == reversal(num);
	}

}
